' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.11.19.18.55]) on 2023.11.24 at 21:52 (Coordinated Universal Time)
' BAM port and mod of Jason Anthony's QB64 program (https://sourceforge.net/projects/fish-screensaver-for-win-10/)
OPTION EXPLICIT
' 🟠🟠🟠 Declarations
DECLARE SUB InitFish(f%)
DECLARE SUB MoveFish(f%)
DECLARE SUB DrawFishBit(f%, x1%, y1%, x2%, y2%)
DIM sw% = 640, sh% = 360
TYPE tFish
x% : y%
color%
direction%
counter%
speed%
END TYPE
fish_directions: CONST LEFT% = -1, RIGHT% = +1
DIM i%, fish_count%
fish_count% = MAX(VAL(NVL$(_PROMPT( "How many fish in the aquarium?", "2"), "2")),2)
DIM fish(1 TO fish_count%) as tFish
' 🟠🟠🟠 Initialisation
FOR i% = 1 TO fish_count%
InitFish(i%)
NEXT i%
SCREEN _NEWIMAGE(sw%, sh%, 17)
' 🟠🟠🟠 Main program
🏁StartMoveFishCycle: 'Starts main loop
CLS 'Erases old image after new image appears to avoid trail of images
_DELAY 0.01 ' 2
FOR i% = 1 TO fish_count%
MoveFish(i%)
NEXT i%
_DISPLAY 'New simpler version of pcopy - Eliminates screen flicker from partial screen refresh frames
🏁EndMoveFishCycle: GOTO 🏁StartMoveFishCycle
' 🟠🟠🟠 Subroutines
SUB InitFish(f%)
fish(f%).direction% = CHOOSE(INT(RND*2)+1,LEFT%,RIGHT%)
fish(f%).x% = IFF(fish(f%).direction% = LEFT%, sw% , 0) - RND * sw% * fish(f%).direction% 'Starting point for Right moving fish
fish(f%).y% = ( sh% - 40 ) * RND + 10
fish(f%).color% = RND*63 + 1 'Starting color for Right moving fish
fish(f%).counter% = RND * 20
fish(f%).speed% = IFF(INT(RND * 5 + 1) = 5, 2, 1)
END SUB
SUB DrawFishBit(f%, x1%, y1%, x2%, y2%)
LINE (fish(f%).x% - x1% * fish(f%).direction%, fish(f%).y% + y1%) _
TO (fish(f%).x% - x2% * fish(f%).direction%, fish(f%).y% + y2%), fish(f%).color%, BF
END SUB
SUB MoveFish(f%)
DrawFishBit(f%, 13, 0, 18, 2)
DrawFishBit(f%, 8, 2, 13, 4)
DrawFishBit(f%, 18, 2, 23, 4)
fish(f%).counter% = fish(f%).counter% + 1
IF fish(f%).counter% = 21 _
THEN fish(f%).counter% = 0
IF fish(f%).counter% < 20 * .7 _
THEN DrawFishBit(f%, 33, 2, 35, 4) : DrawFishBit(f%, 33, 16, 35, 18)
DrawFishBit(f%, 5, 4, 8, 6)
DrawFishBit(f%, 23, 4, 25, 6)
DrawFishBit(f%, 30, 4, 33, 6)
DrawFishBit(f%, 3, 6, 5, 8)
DrawFishBit(f%, 9, 6, 11, 8)
DrawFishBit(f%, 23, 6, 30, 8)
DrawFishBit(f%, 0, 8, 3, 10)
IF fish(f%).counter% < 20 * .5 _
THEN DrawFishBit(f%, 15, 8, 18, 10) : DrawFishBit(f%, 15, 10, 18, 12)
DrawFishBit(f%, 28, 8, 30, 10)
DrawFishBit(f%, 0, 10, 3, 12)
DrawFishBit(f%, 13, 10, 15, 12)
DrawFishBit(f%, 28, 10, 30, 12)
DrawFishBit(f%, 3, 12, 8, 14)
DrawFishBit(f%, 23, 12, 30, 14)
DrawFishBit(f%, 5, 14, 8, 16)
DrawFishBit(f%, 23, 14, 25, 16)
DrawFishBit(f%, 30, 14, 33, 16)
DrawFishBit(f%, 8, 16, 13, 18)
DrawFishBit(f%, 18, 16, 23, 18)
DrawFishBit(f%, 13, 18, 18, 20)
fish(f%).x% = fish(f%).x% + ( fish(f%).direction% * fish(f%).speed% )
IF (fish(f%).direction% = LEFT% AND fish(f%).x% < -100) _
OR (fish(f%).direction% = RIGHT% AND fish(f%).x% > XMAX+100) THEN Initfish(f%)
END SUB